package features.advance.leetcode.binary;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


/**
 * @author LIN
 * @date 2021-12-20 16:53
 *
 *  349. 两个数组的交集
 *
 *  难度：简单
 *
 * 给定两个数组，编写一个函数来计算它们的交集。
 *
 *
 *
 * 示例 1：
 *
 * 输入：nums1 = [1,2,2,1], nums2 = [2,2]
 * 输出：[2]
 * 示例 2：
 *
 * 输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
 * 输出：[9,4]
 *
 *
 * 说明：
 *
 * 输出结果中的每个元素一定是唯一的。
 * 我们可以不考虑输出结果的顺序。
 */
public class Solution349 {

    public static void main(String[] args) {
        Solution solution = new Solution() {
        };
        int[] nums1 = {4,9,5};
        int[] nums2 = {9,4,9,8,4};
        int[] intersection = solution.intersection(nums1, nums2);
        System.out.println(Arrays.toString(intersection));

    }

    static class Solution {
        /**
         * 使用集合set
         *
         * 也可以使用（排序+双指针）
         * @param nums1
         * @param nums2
         * @return
         */
        public int[] intersection(int[] nums1, int[] nums2) {
            Set<Integer> set = new HashSet<>(16);
            Set<Integer> res = new HashSet<>(16);

            for (int num : nums1) {
                set.add(num);
            }
            for (int num : nums2) {
                if(set.contains(num)){
                    res.add(num);
                }
            }
            int[] a = new int[res.size()];
            Iterator<Integer> iterator = res.iterator();
            int i = 0;
            while(iterator.hasNext()){
                a[i++] = iterator.next();
            }
            return a;
        }
    }
}
